<?php

namespace App\Jobs;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

//生成的类都实现了 Illuminate\Contracts\Queue\ShouldQueue 接口, 告诉 Laravel 将该任务推送到队列，而不是立即运行。
class MyQueue implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    public $tries = 5;//The number of times the job may be attempted.
    public $timeout = 30;//The number of seconds the job can run before timing out.
    public $msg;
    /**
     * Create a new job instance.
     *使用了 SerializesModels trait，传入的数据或对象将会在任务被执行时优雅地序列化和反序列化。如果你的队列任务在构造函数中接收Eloquent 模型，只有模型的主键会被序列化到队列，当任务真正被执行的时候，队列系统会自动从数据库中获取整个模型实例。这对应用而言是完全透明的，从而避免序列化整个 Eloquent 模型实例引起的问题。
     * @return void
     */
    public function __construct($msg ='执行')
    {
        //
        $this->msg = $msg;
    }

    /**
     * Execute the job.
     *handle 方法在任务被处理的时候调用，注意我们可以在任务的 handle 方法中进行依赖注入。Laravel 服务容器会自动注入这些依赖。
     * 二进制数据，如原生图片内容，在传递给队列任务之前先经过 base64_encode 方法处理，此外，该任务被推送到队列时将不会被序列化为 JSON 格式。
     * @return void
     */
    public function handle()
    {
        //
        //$time = Carbon::now()->addMinutes(10);
        //Log::info(json_encode($time));
        Log::info($this->msg .'22');
    }
}
